home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
X11
/
wais
/
waisgate
/
DCLServer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-09
|
3KB
|
121 lines
/* Handle a request from a WWW client DCLServer.c
** ==================================
**
** Authors
** JFG Jean-Francois Groff, CERN, Geneva jfg@info.cern.ch
** TBL Tim Berners-Lee CERN tbl@info.cern.ch
** JS Jonathan Streets, FNAL streets@fnal.fnal.gov
**
** History:
**
** 1.0 9 Jul 92 (TBL, JS) DocDB gateway hacked from VMSHelp gateway
**
** 0.3 27 Sep 91 (JFG) VMSHelp gateway created from h2h.c
**
*/
/* (c) CERN WorldWideWeb project 1990-1992. See Copyright.html for details */
/* and FNAl etc etc */
/* This is the DCL command which will be used
*/
#define DCL_COMMAND "@docdbgate"
/** Headers taken from HTRetrieve.c **/
#define BUFFER_SIZE 4096 /* Arbitrary size for efficiency */
#include "HTUtils.h"
#include "tcp.h"
extern int WWW_TraceFlag; /* Control diagnostic output */
extern FILE * LogFile; /* Log file output */
extern char HTClientHost[16]; /* Client name to be output */
extern int HTWriteASCII(int soc, char * s); /* In HTDaemon.c */
/** Headers taken from h2h.c **/
/* Maximum line size for buffers */
#define LSIZE 256
/* Maximum command line size for VMS */
#define CSIZE 256
/* Maximum VMS file name size (on 5.3, it's really 41, yuk! hope for more) */
#define FSIZE 80
/******************************************************************************
HTRetrieve : Retrieves information for the W3 server by calling a DCL file
Inputs :
char *arg : HT address
char *keywords : plus-separated keyword list, if any
int soc : output socket
DCL file parameters:
p1 The device name down which the result should be sent
p2 The document id requested
p3 The keywords requested if any, still + separated.
-----------------------------------------------------------------------------*/
#include <dvidef.h>
int HTRetrieve
#ifdef __STDC__
(const char *arg, const char *keywords, const int soc)
#else
(arg, keywords, soc)
char *arg;
char *keywords;
int soc;
#endif
{
FILE *hlp;
char *query;
char *s;
char command[1024]; /* bug */
#define STRING_SIZE 65
char devname[STRING_SIZE];
struct {
int size;
char* string;
} desc_devname;
int status;
int length;
int item;
/* First of all, we must get the device name of the socket
** to pass to the DCL coimmand file.
*/
desc_devname.string = &devname[0];
desc_devname.size = STRING_SIZE;
item = DVI$_DEVNAM;
status=lib$getdvi(&item,&soc,0,0,&desc_devname,&length);
if (!(status&1))
lib$signal(status);
desc_devname.string[length] = '\0';
if (TRACE) fprintf(stderr, "DCLServer: socket devname is %s \n",devname);
/* Now we call the DCL file to do the work
*/
if (keywords) sprintf(command,
"%s \"%s\" \"%s\" \"%s\" ", DCL_COMMAND, devname, arg, keywords);
else sprintf(command,
"%s \"%s\" \"%s\"", DCL_COMMAND, devname, arg);
system(command); /* ought to check return code @@@ */
return 0; /* OK */
}